// SPU管理模块的接口
import request from '@/utils/request'
// 引入SPU类型
import type {
  SpuResponseData,
  AllTrademark,
  SpuHasImg,
  SaleAttrResponseData,
  HasSaleAttrResponseData,
  SpuData,
  SkuData,
  SkuInfoData,
} from '@/api/product/spu/type'
enum API {
  // 获取已有的SPU的数据
  GETSPU_URL = '/admin/product/',
  // 获取全部品牌的数据
  ALLTRADEMARK_URL = '/admin/product/baseTrademark/getTrademarkList',
  // 获取某一个SPU下的全部售卖商品的照片数据
  IMAGES_URL = '/admin/product/spuImageList/',
  // 获取某一个SPU下的全部的已有的销售属性接口地址
  SPUSALEATTR_URL = '/admin/product/spuSaleAttrList/',
  // 获取整个项目全部的销售属性【颜色、版本、尺码】
  SPUSALE_URL = '/admin/product/baseSaleAttrList',
  // 添加新的SPU
  ADDSPU_URL = '/admin/product/saveSpuInfo',
  // 修改已有的SPU
  UPDATESPU_URL = '/admin/product/updateSpuInfo',
  // 添加SKU
  ADDSKU_URL = '/admin/product/saveSkuInfo',
  // 查看某一个已有的SPU下全部售卖的商品
  SKUINFO_URL = '/admin/product/findBySpuId/',
  // 删除指定的SPU
  DELETESPU_URL = '/admin/product/deleteSpu/',
}

// 获取某一个三级分类下已有的SPU数据
export const reqGetSPU = (
  pageNo: number,
  limit: number,
  category3Id: number | string,
) =>
  request.get<any, SpuResponseData>(
    API.GETSPU_URL + `${pageNo}/${limit}?category3Id=${category3Id}`,
  )

// 获取全部的SPU的品牌的数据
export const reqAllTradeMark = () =>
  request.get<any, AllTrademark>(API.ALLTRADEMARK_URL)

// 获取某一个已有的SPU下的全部商品的照片地址
export const reqImageList = (spuId: number) =>
  request.get<any, SpuHasImg>(API.IMAGES_URL + spuId)

// 获取某一个已有的SPU下有多少个销售属性
export const reqSaleAttrList = (spuId: number) =>
  request.get<any, SaleAttrResponseData>(API.SPUSALEATTR_URL + spuId)

// 获取全部的销售属性
export const reqALlSaleAttr = () =>
  request.get<any, HasSaleAttrResponseData>(API.SPUSALE_URL)

// 添加一个新的SPU
// 更新已有的SPU（这里我们直接合并，添加与新增的区别就在于是否有id)
// data：即为新增或者已有的SPU对象
export const reqAddOrUpdateSPU = (data: SpuData) => {
  // 如果SPU对象拥有ID，更新已有的SPU
  if (data.id) {
    return request.post<any, any>(API.UPDATESPU_URL, data)
  } else {
    return request.post<any, any>(API.ADDSPU_URL, data)
  }
}

// 添加SKU的请求方法
export const reqAddSku = (data: SkuData) =>
  request.post<any, any>(API.ADDSKU_URL, data)

// 获取SKU的数据
export const reqSkuList = (spuId: number | string) =>
  request.get<any, SkuInfoData>(API.SKUINFO_URL + spuId)

// 删除指定SPU的数据
export const reqRemoveSpu = (spuId: number | string) =>
  request.delete<any, any>(API.DELETESPU_URL + spuId)
